package com.code.common.enums;

/**
 * API统一返回状态码枚举
 *
 * @author tangyifei
 */
public enum ResultCode {

    /* 成功状态码 */
    SUCCESS(1, "成功"),
    REQUEST_IS_TOO_HIGH(2, "请求太频繁"),

    /* 参数错误：10001-19999 */
    PARAM_IS_INVALID(10001, "参数无效"),
    PARAM_IS_BLANK(10002, "参数为空"),
    PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
    PARAM_NOT_COMPLETE(10004, "参数缺失"),
    API_VERSION_TOO_LOW(10005, "api版本号太低"),
    APP_VERSION_TOO_LOW(10006, "app版本号太低"),

    /* 用户相关的错误码与错误信息：20001-29999*/
    USER_ERROR_20001(20001, "用户未登录"),
    USER_ERROR_20002(20002, "手机号码格式错误"),
    USER_ERROR_20003(20003, "区号不能为空"),
    USER_ERROR_20004(20004, "用户手机号已存在"),
    USER_ERROR_20005(20005, "用户密码不正确"),
    USER_ERROR_20006(20006, "用户不存在"),
    USER_ERROR_20007(20007, "用户已冻结"),
    USER_ERROR_20008(20008, "同一个手机号间隔60秒发送短信，避免恶意攻击短信接口"),
    USER_ERROR_20009(20009, "同一个手机号一天只能发送10次，避免恶意攻击短信接口"),
    USER_ERROR_20010(20010, "验证码已过期"),
    USER_ERROR_20011(20011, "验证码错误"),
    USER_ERROR_20012(20012, "请选择一个头像进行上传"),
    USER_ERROR_20013(20013, "邀请人还没有注册，不能邀请别人"),
    USER_ERROR_20014(20014, "不能自己邀请自己"),
    USER_ERROR_20015(20015, "必须有邀请人和邀请码才允许注册"),
    USER_ERROR_20016(20016, "用户已存在"),
    USER_ERROR_20017(20017, "验证码不能为空"),
    USER_ERROR_20018(20018, "用户已经认证"),
    USER_ERROR_20019(20019, "用户认证信息不全"),
    USER_ERROR_20020(20020, "用户没有实名认证"),
    USER_ERROR_20021(20021, "旧交易密码不能为空"),
    USER_ERROR_20022(20022, "旧交易密码不正确"),
    USER_ERROR_20023(20023, "用户密码不正确"),

    /* 系统错误：40001-49999 */
    SYSTEM_INNER_ERROR(40001, "系统繁忙，请稍后重试"),
    BIGDECIMAL_VALIDATOR_ERROR(40002, "DecimalValidator只能作用在BigDecimal类型上"),

    /* 数据错误：50001-599999 */
    DATA_IS_NOT_FOUND(50001, "数据未找到"),
    DATA_IS_WRONG(50002, "数据有误"),
    DATA_ALREADY_EXISTED(50003, "数据已存在"),

    /* 接口错误：60001-69999 */
    INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"),
    INTERFACE_OUTER_INVOKE_ERROR(60002, "外部系统接口调用异常"),
    INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"),
    INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"),
    INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"),
    INTERFACE_EXCEED_LOAD(60006, "接口负载过高"),
    GET_LOCK_ERROR(60007, "获取锁发生错误！"),

    /* 权限错误：70001-79999 */
    PERMISSION_NO_ACCESS(70001, "无访问权限"),
    RESOURCE_EXISTED(70002, "资源已存在"),
    RESOURCE_NOT_EXISTED(70003, "资源不存在"),

    /* 系统错误：90001-99999 */
    SYSTEM_PROTECT(90001, "系统维护中"),
    SUPER_ADMIN_ERROR(90002, "不是超级管理员，不能执行该操作"),
    ;

    private final Integer code;

    private final String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer code() {
        return this.code;
    }

    public String message() {
        return this.message;
    }

    /**
     * 获取枚举中的状态信息
     *
     * @param name 枚举名称
     * @return 相关枚举项的枚举状态信息
     */
    public static String getMessage(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.message;
            }
        }
        return name;
    }

    /**
     * 获取枚举中的返回状态码
     *
     * @param name 枚举名称
     * @return 相关枚举项的枚举返回状态码
     */
    public static Integer getCode(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.code;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return this.name();
    }

}
